package com.zjpavt.client.page.intefacepage;

import com.zjpavt.client.enums.KeyCodeEnum;
import com.zjpavt.client.page.editableunit.EditUnit;
import com.zjpavt.client.util.builderfactory.PostConstruct;

/**
 * 可编辑页面
 * 实现PostConstract接口后 初始化过程在init中完成 实现构造方法与初始化的分离
 * @author zyc
 */
public interface EditablePage extends BasePage, PostConstruct {
    @Override
    void onKeyDown();

    @Override
    void onKeyUp();

    @Override
    void onKeySet();

    @Override
    void onKeyEnt();

    @Override
    void onVisibleChanged(boolean isVisible);

    @Override
    int getPageNum();

    @Override
    void onKeyPressed(KeyCodeEnum keyCodeEnum);

    @Override
    void refreshPage();

    /**
     * 获取有几个可编辑单元
     * @return
     */
    int getEditUnitSize() ;

    /**
     * 增加一个可编辑单元
     * @param e
     */
    void addEditUnit(EditUnit e) ;

    /**
     * 移除一个可编辑单元
     * @param e
     */
    void removeEditUnit(EditUnit e);

    /**
     * 删除所有可编辑单元
     */
    void clearEditUnit() ;
    /**
     * 获取指定的可编辑单元 从0开始
     **/
    EditUnit getEditUnit(int index) ;

    /**
     * 获取当前选中的但愿快的下标 从0开始
     * @return
     */
    int getCurrBlinkIndex() ;

    /**
     * 退出可编辑模式
     */
    void exitEditMode() ;

    /**进入编辑模式
     */
    void enterEditMode();

    /**
     *  处于可编辑模式下
     * @return
     */
    boolean isInEditMode() ;

    /**
     * 为可编辑单元设置初始值
     * 需要在进入编辑模式 和 初始化的时候调用
     */
    void setDefaultVal();

    /**
     * 初始化可编辑单元
     */
    void initEditUnits();

    /**
     * 保存修改的参数
     */
    void saveVal();

    @Override
    void init();
}
